//################################################################################
// MIT License
// Copyright (c) 2024 ZhangYihua
//
// Change Logs:
// Date           Author       Notes
// 2023-07-23     ZhangYihua   first version
//
// Description  : axi default slave to avoid no-response halt
//################################################################################

module axi_dft_slv #(
parameter           ADDR_BW                 = 16,               // lower address
parameter           DATA_BW                 = 32,
parameter           DFT_RDATA               = {DATA_BW{1'b0}}
) ( 
input                                       rst_n,
input                                       clk,

input               [ADDR_BW-1:0]           slv_awaddr,
input                                       slv_awvalid,
output                                      slv_awready,

input               [DATA_BW-1:0]           slv_wdata,
input                                       slv_wvalid,
output                                      slv_wready,

output              [2-1:0]                 slv_bresp,
output  reg                                 slv_bvalid,
input                                       slv_bready,

input               [ADDR_BW-1:0]           slv_araddr,
input                                       slv_arvalid,
output                                      slv_arready,

output              [DATA_BW-1:0]           slv_rdata,
output              [2-1:0]                 slv_rresp,
output  reg                                 slv_rvalid,
input                                       slv_rready
);

//################################################################################
// define local varialbe and localparam
//################################################################################

wire                                        aw_w_valid;

//################################################################################
// main
//################################################################################

assign aw_w_valid = slv_awvalid & slv_wvalid;

assign slv_awready = aw_w_valid;
assign slv_wready  = aw_w_valid;
assign slv_arready = 1'b1;

always@(posedge clk or negedge rst_n) begin
    if (rst_n==1'b0) begin
        slv_bvalid <=`U_DLY 1'b0;
        slv_rvalid <=`U_DLY 1'b0;
    end else begin
        if (aw_w_valid==1'b1)
            slv_bvalid <=`U_DLY 1'b1;
        else if (slv_bready==1'b1)
            slv_bvalid <=`U_DLY 1'b0;
        else
            ;

        if (slv_arvalid==1'b1)
            slv_rvalid <=`U_DLY 1'b1;
        else if (slv_rready==1'b1)
            slv_rvalid <=`U_DLY 1'b0;
        else
            ;
    end
end

assign slv_bresp = 2'b00;
assign slv_rresp = 2'b00;
assign slv_rdata = DFT_RDATA;

//################################################################################
// ASSERTION
//################################################################################

`ifdef CBB_ASSERT_ON
// synopsys translate_off


// synopsys translate_on
`endif

endmodule
